package com.insight.common.enums;

import lombok.Getter;

/**
 * T016: 采集类型枚举
 * 表示元数据采集的模式
 */
@Getter
public enum CollectionType {

    /**
     * 全量采集
     * 采集数据源中的所有表结构元数据
     */
    FULL("Full", "全量采集", "采集所有表结构"),

    /**
     * 增量采集
     * 仅采集自上次采集后发生变化的表结构
     * 基于差异检测算法（SHA-256 + Jaccard相似度）
     */
    INCREMENTAL("Incremental", "增量采集", "仅采集变更表");

    /**
     * 英文名称
     */
    private final String code;

    /**
     * 中文名称
     */
    private final String displayName;

    /**
     * 描述
     */
    private final String description;

    CollectionType(String code, String displayName, String description) {
        this.code = code;
        this.displayName = displayName;
        this.description = description;
    }

    /**
     * 根据代码获取采集类型
     *
     * @param code 类型代码
     * @return 采集类型枚举
     * @throws IllegalArgumentException 如果代码不匹配任何类型
     */
    public static CollectionType fromCode(String code) {
        for (CollectionType type : values()) {
            if (type.code.equalsIgnoreCase(code) || type.name().equalsIgnoreCase(code)) {
                return type;
            }
        }
        throw new IllegalArgumentException("Unknown collection type code: " + code);
    }

    /**
     * 判断是否为全量采集
     *
     * @return true 如果是全量采集
     */
    public boolean isFull() {
        return this == FULL;
    }

    /**
     * 判断是否为增量采集
     *
     * @return true 如果是增量采集
     */
    public boolean isIncremental() {
        return this == INCREMENTAL;
    }
}
